package br.com.atibrasil.fx.controller;

import java.io.IOException;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.fxml.FXML;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

import com.oracle.webservices.internal.api.EnvelopeStyle.Style;

import br.com.atibrasil.dao.RegistroDAO;
import br.com.atibrasil.model.Empresa;
import br.com.atibrasil.model.H010;
import br.com.atibrasil.model.Parametro;

public class RegistroInventarioForm extends PadraoForm{
	int w = 19;	
    CellStyle estiloMoeda;
    Map<String, Empresa> hashTotais = new HashMap<String, Empresa>();
    double valorTotal = 0;
    double valorTotalPeriodo = 0;
	String ultimoIndicadorPropriedade = "0";
    
    @FXML
    void initialize() { 
        btnSalvar.setOnAction(new EventHandler(){
			@Override
			public void handle(Event arg0) {							
			    path = "modelRegistroInventario.xls";
			    ultimoIndicadorPropriedade = "0";
				w = 20;
				hashTotais = new HashMap<String, Empresa>();
				valorTotal = 0;
			    valorTotalPeriodo = 0;
				try {
					 inicio2();					 			 			    	 
					 RegistroDAO registroDAO = new RegistroDAO();
					 Parametro parametro = new Parametro();
					 parametro.setCiap(true);
				     Empresa empresa = registroDAO.getInventarioEmpresa(null);
				     Calendar calendar = Calendar.getInstance();

					 //Escreve aba 1
					 Row r = aba1.getRow(8);
					 Cell c = r.getCell(0);
					 String titulo = c.getStringCellValue();			 
					 c.setCellValue(titulo);
					 
					 r = aba1.getRow(11);
					 c = r.getCell(0);
					 c.setCellValue(nomeEmpresa);								
					
					 r = aba1.getRow(13);
					 c = r.getCell(0);
					 c.setCellValue(cnpj);
					 
					 c = r.getCell(3);
					 c.setCellValue(inscricaoEstadual);
				 
					 r = aba1.getRow(16);
					 c = r.getCell(0);
					 estiloMoeda = c.getCellStyle();
					 r.createCell(0);
					 
			         Collections.sort(empresa.getListaH010(), new Comparator() {  
				            public int compare(Object o1, Object o2) {  
				                H010 p1 = (H010) o1;  
				                H010 p2 = (H010) o2; 
				            	int resultado = p1.getIndicadorPropriedadePosse().compareTo(p2.getIndicadorPropriedadePosse());
				                if ( resultado != 0 ) {
				                	return resultado;
				                }
				                return resultado;
				            }  
				     }); 
			         
					 for (H010 h010 : empresa.getListaH010()) {		 						 
				 			montarTabelaDetalhe(aba1, h010);
				 			w++;
					 }	
					 
					 r = aba1.createRow(w);
					 c = r.createCell(0);
					 c.setCellStyle(defautStyle);
					 c.setCellValue("TOTAL DO PERIODO");
					 
					 for (int i = 1 ; i <= 9; i++) {
						 c = r.createCell(i);
						 c.setCellStyle(defautStyle);
						 c.setCellValue("");				
					 }			 
					 c = r.createCell(10);
					 c.setCellStyle(estiloMoeda);
					 c.setCellValue(valorTotalPeriodo);	
					 
					 // Valor Total
					 r = aba1.getRow(18);
					 c = r.getCell(6);
					 //c.setCellStyle(estiloMoeda);
					 c.setCellValue(valorTotal);						 					 
					 
					 file = txtPatrimonio.getText().replace("\\", "\\\\");					 
					 fim();
				} catch (ClassNotFoundException | SQLException | IOException e) {
					e.printStackTrace();
					status.setText(e.getMessage());
				} catch (ParseException e) {
					e.printStackTrace();
					status.setText(e.getMessage());
				}
			}	
		});
        
        btnChooser.setOnAction(new EventHandler(){
			@Override
			public void handle(Event arg0) {
				escolherArquivo();
			}
		});  
    }       
    
	private void montarTabelaDetalhe(Sheet aba, H010 h010 ) {
		 Row registro;
		 Cell celula;			 		 
		 registro = aba.createRow(w);
		 			 
		 defautStyle.setFillForegroundColor(estiloMoeda.getFillForegroundColor());
		 defautStyle.setFillPattern(estiloMoeda.getFillPattern());	
		 defautStyle.setFillBackgroundColor(estiloMoeda.getFillBackgroundColor());
		 
		 decimalFormat.setFillForegroundColor(estiloMoeda.getFillForegroundColor());
		 decimalFormat.setFillPattern(estiloMoeda.getFillPattern());
		 decimalFormat.setFillBackgroundColor(estiloMoeda.getFillBackgroundColor());
		 
		 if (w == 20){
			 celula = registro.createCell(0);
			 celula.setCellStyle(defautStyle);
			 celula.setCellValue("Item de propriedade do informante em seu poder");
		 }else{
			 celula = registro.createCell(0);
			 celula.setCellStyle(defautStyle);
			 celula.setCellValue("");
		 }
		 
		 if (!ultimoIndicadorPropriedade.equals(h010.getIndicadorPropriedadePosse()) && !h010.getIndicadorPropriedadePosse().equals("")){
			 registro = aba.createRow(w);
			 celula = registro.createCell(0);
			 celula.setCellStyle(defautStyle);
			 celula.setCellValue("TOTAL DO PERIODO");
			 
			 for (int i = 1 ; i <= 9; i++) {
				 celula = registro.createCell(i);
				 celula.setCellStyle(defautStyle);
				 celula.setCellValue("");				
			 }			 
			 celula = registro.createCell(10);
			 celula.setCellStyle(estiloMoeda);
			 celula.setCellValue(valorTotalPeriodo);	
			 valorTotalPeriodo = 0;
			 
			 w++;
			 registro = aba.createRow(w);
			 			 			 
			 if (h010.getIndicadorPropriedadePosse().equals("1")){
				 celula = registro.createCell(0);
				 celula.setCellStyle(defautStyle);
				 celula.setCellValue("Item de propriedade do informante em pose de terceiros");
			 }else{
				 celula = registro.createCell(0);
				 celula.setCellStyle(defautStyle);
				 celula.setCellValue("Item de propriedade de terceiros em poder do informante");
			 }
			 ultimoIndicadorPropriedade = h010.getIndicadorPropriedadePosse();
		 }		 
		 celula = registro.createCell(1);
		 celula.setCellStyle(defautStyle);
		 celula.setCellValue(h010.getCodigoParticipante());
		 
		 celula = registro.createCell(2);		
		 celula.setCellStyle(defautStyle);		 
		 if (h010.getR0150() != null) {		 
			 celula.setCellValue(h010.getR0150().getNomeEmpresarial());
			 celula = registro.createCell(3);
			 celula.setCellStyle(defautStyle);
			 celula.setCellValue(h010.getR0150().getCnpj());
			 celula = registro.createCell(4);
			 celula.setCellStyle(defautStyle);
			 celula.setCellValue(h010.getR0150().getInscricaoEstadual());
	 	 }else{
			 celula.setCellValue("");
			 celula = registro.createCell(3);
			 celula.setCellStyle(defautStyle);
			 celula.setCellValue("");
			 celula = registro.createCell(4);
			 celula.setCellStyle(defautStyle);			 
			 celula.setCellValue("");			 
	 	 }		 
		 celula = registro.createCell(5);
		 celula.setCellStyle(defautStyle);
		 celula.setCellValue(h010.getCodigoItem());
		 
		 celula = registro.createCell(6);
		 celula.setCellStyle(defautStyle);
		 if (h010.getR0200() != null) {		 
			 celula.setCellValue(h010.getR0200().getDescricao());
	 	 }else{
			 celula.setCellValue("");
	 	 }		
		 
		 celula = registro.createCell(7);
		 celula.setCellStyle(defautStyle);		 
		 celula.setCellValue(h010.getQuantidade());
		 
		 celula = registro.createCell(8);
		 celula.setCellStyle(defautStyle);		 
		 celula.setCellValue(h010.getUnidade());
		 
		 celula = registro.createCell(9);
		 celula.setCellStyle(defautStyle);		 
		 celula.setCellValue(h010.getValorUnitarioItem());
		 
		 celula = registro.createCell(10);
		 celula.setCellStyle(estiloMoeda);		 
		 celula.setCellValue(h010.getValorItem());
		 
		 valorTotalPeriodo = valorTotalPeriodo + h010.getValorItem();
		 valorTotal = valorTotal + h010.getValorItem();
		 		 		 		 		 		 		 
	}
	
}
